VIM global
1 背景知识
Note
:global
命令允许在某个指定模式的所有匹配行上运行Ex命令。首先研究一下它的语法。
2 标准语法
:[range] global[!]/{pattern}/[cmd]
3 任何 cmd 命令也支持范围:所以命令表达式也可能是这样:
:[range] global[!]/{pattern}/[range] [cmd]
4 range 含义解释
g/{start}/ .,{finish} [cmd]
4.1 静默输出
:g/{/sil .+1,/}/−1 >
命令 | 说明 |
---|---|
g |
global ` 命令。 |
{ |
从大括号哪一行开始。 |
/sil |
不输出提示符。 |
.+1 |
从大括号开始下面一行。 |
, |
范围分割符。 |
} |
大括号所在位置。 |
-1 |
向上偏移一行。 |
-
首先,在缺省情况下,:global命令的作用范围是整个文件(%),这一点与其他大多数Ex命令(包括:delete、:substitute 以及 :normal)有所不同,这些命令的缺省范围仅为当前行(.)。
-
其次,{pattern} 域与查找历史相互关联。这意味着如果将该域留空的话,Vim会自动使用当前的查找模式。
-
另外,[cmd]可以是除 :global命令之外的任何Ex命令。在实际应用中,如表5-1中所列的那些Ex命令,无一不在处理文本过程中起到了极大的作用。顺便提一下,如果不指定任何 [cmd],Vim将缺省使用 :print。
-
还有,可以用 :global! 或者 :vglobal(v表示invert)反转:global命令的行为。这两条命令将指示Vim在没有匹配到指定模式的行上执行 [cmd]。在下一节中,将会分别看到 :global 与 :vglobal的应用实例。
-
最后需要指出的是 :global命令在指定 [range] 内的文本行上执行时通常分为两轮。第一轮,Vim在所有[pattern]的匹配行上做上标记。第二轮,再在所有已标记的文本行上执行 [cmd]。另外,由于 [cmd] 的范围可单独设定,因此可在多行文本段内进行操作,将在技巧101中讲解这项强大的技术。